﻿#define _CRT_SECURE_NO_WARNINGS 1
///*
//strtok函数的使用
//char * strtok ( char * str, const char * delimiters );
//*/
//#include<stdio.h>
//#include<string.h>
//int main()
//{
//	char arr[] = "aaa.bbb@ccc#ddd";
//	char buf[60] = { 0 };
//	strcpy(buf, arr);
//	char* p = "#.@";
//	char* r = NULL;
//	for (r = strtok(buf, p); r != NULL; r = strtok(NULL, p))
//	{
//		printf("%s ", r);
//	}
//	printf("\n");
//	return 0;
//}

//#include<stdio.h>
//#include<string.h>
//
//char* strstr(const char* str1, const char* str2)
//{
//	char* cp = (char*)str1;
//	char* s1, * s2;
//	if (!*str2)
//		return((char*)str1);
//	while (*cp)
//	{
//		s1 = cp;
//		s2 = (char*)str2;
//		while (*s1 && *s2 && !(*s1 - *s2))
//			s1++, s2++;
//		if (!*s2)
//			return(cp);
//		cp++;
//	}
//	return(NULL);
//}
//
//int main()
//{
//	char str[] = "This is a simple string";
//	char* pch;
//	pch = strstr(str, "simple");//这里找到了这个字符的位置，并返回这个字符串的首字符地址
//	strncpy(pch, "sample", 6);//根据这个地址，将simple替换为sample
//	printf("%s\n", str);
//	return 0;
//}

//
//#include<stdio.h>
//#include<string.h>
//#include<errno.h>
//int main()
//{
//	FILE* pf = fopen("add.txt","r");
//	if (pf == NULL)
//	{
//		printf("打开文件失败，失败原因为：%s\n", strerror(errno));
//		perror("打开文件失败，失败原因为");
//	}
//	else
//	{
//		printf("打开成功");
//	}
//	return 0;
//}
//

#include<stdio.h>
#include<string.h>
#include<assert.h>
//char* my_strcpy(char* e1, const char* e2)
//{
//	char* a = e1;		//将目标地址的位置先保存下来，以便返回目标地址值
//	assert(e1&&e2);		//e1和e2都不为NULL
//	while (*e1 = *e2)	//将e2的值赋值给e1,然后都向后移动一位，直至全部移动完毕
//	{
//		e1++;
//		e2++;
//	}
//	return a;
//}
//int main()
//{
//	char arr1[] = "hello ";
//	char arr2[] = "world!";
//	printf("%s",my_strcpy(arr1, arr2)); 
//	return 0;
//}

/******************************************************************/
///*
//strcat函数的实现
//*/
//int main()
//{
//	char arr1[20] = "hello ";
//	char arr2[] = "world!";
//	printf("%s", strcat(arr1, arr2));
//	return 0;
//}
/*
strcat函数的模拟实现
*/
//1、目标位置的空间要足够大，不然在移动过来内容后会造成溢出
//2、源字符串中要以'\0'结束
//3、目标字符串要有\0,否则无法知道从哪里开始
//char* my_strcat(char* e1, const char* e2)//
//{
//	char* a = e1;		//记录下目标空间的起始位置地址，便于最后返回
//	assert(e1 && e2);
//	while (*e1)			//因为要从目标空间的\0处开始，所以要先找到\0
//	{
//		e1++;
//	}
//	while (*e1 = *e2)		//目前这里e1就是在\0处，将e2的内容赋值给e1，直到e2指向\0
//	{
//		e1++;
//		e2++;
//	}
//	return a;
//}
//
//int main()
//{
//	char arr1[20] = "hello ";
//	char arr2[] = "world!";
//	printf("%s", strcat(arr1, arr2));
//	return 0;
//}
/******************************************************************/


/*
strcmp函数的使用
*/
//int main()
//{
//	char arr1[] = "abcdefgbcdd";
//	char arr2[] = "abcdebcdd";
//	printf("%d", strcmp(arr1, arr2));
//	return 0;
//}
/*
strcmp函数的模拟实现
1、第一个字符串大于第二个字符串，则返回大于0的数字
2、第一个字符串等于第二个字符串，则返回0
3、第一个字符串小于第二个字符串，则返回小于0的数字
*/

//int my_strcmp(const char* e1, const char* e2)	//我们只进行两个字符串的对比，不改变其内容
//{
//	int ret = 0;	//先定义一个ret，等e1和e2都相等的时候返回
//	assert(e1 && e2);
//	while (*e1 == *e2)	//这里开始进行比较，看指针内容是否相等
//	{
//		if (*e1 == '\0')	//如果目标字符串出现\0了，说明字符串已经比较完毕了
//		{
//			return 0;
//		}
//		e1++;			//相等后，两个指针各自加1进行下一个对比
//		e2++;
//	}
//	return *e1 - *e2;	//如果*e1和*e2不相同，则返回值
//}
//int main()
//{
//	char arr1[] = "abcde";
//	char arr2[] = "abcde";
//	printf("%d", my_strcmp(arr1, arr2));
//	return 0;
//}

/*
strstr函数的使用
在目标字符串中查找源字符串
*/
//int main()
//{
//	char str[] = "this is a simple string";
//	char* pch;
//	pch = strstr(str, "simple");
//	strncpy(pch, "sample", 6);
//	printf("%s\n", str);
//}

/*
strtok函数的使用
char * strtok ( char * str, const char * sep);
sep参数指向一个字符串，定义了用作分隔符的字符合集；
第⼀个参数指定⼀个字符串，它包含了0个或者多个由sep字符串中⼀个或者多个分隔符分割的标
记。
• strtok函数找到str中的下⼀个标记，并将其⽤ \0 结尾，返回⼀个指向这个标记的指针。（注：
strtok函数会改变被操作的字符串，所以在使⽤strtok函数切分的字符串⼀般都是临时拷⻉的内容
并且可修改。）
• strtok函数的第⼀个参数不为 NULL ，函数将找到str中第⼀个标记，strtok函数将保存它在字符串
中的位置。
• strtok函数的第⼀个参数为 NULL ，函数将在同⼀个字符串中被保存的位置开始，查找下⼀个标
记。
• 如果字符串中不存在更多的标记，则返回 NULL 指针。
*/

//int main()
//{
//	char arr[] = "192.168.6,255";
//	char* sep = ".,";
//	char* str = NULL;
//	for (str = strtok(arr, sep); str != NULL; str = strtok(NULL, sep))
//	{
//		printf("%s\n", str);
//	}
//	return 0;
//}

/*
* 
strerror函数的使用
可以将错误码对应的错误信息的字符串地址返回来
*/
#include <errno.h>
int main()
{
	FILE* pFile;
	pFile = fopen("unexist.ent", "r");
	if (pFile == NULL)
		printf("Error opening file unexist.ent: %s\n", strerror(errno));
	return 0;
}